package es.uned.etsii.si3.taller;

import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable;
import java.math.BigDecimal;
import java.sql.SQLException;

@DatabaseTable(tableName = "materialesdetrabajo")
public
class MaterialTrabajo extends Persistente {
	public static final String ID_FIELD_NAME = "id";
	public static final String ID_TRABAJO_FIELD_NAME = "id_trabajo";
	public static final String ID_MATERIAL_FIELD_NAME = "id_material";
	public static final String UNIDADES_FIELD_NAME = "unidades";
	public static final String PRECIO_FIELD_NAME = "precio";

	@DatabaseField(generatedId = true)
	int id;
	@DatabaseField(foreign = true, foreignAutoRefresh = true, columnName = ID_TRABAJO_FIELD_NAME)
	Trabajo trabajo;
	@DatabaseField(foreign = true, foreignAutoRefresh = true, columnName = ID_MATERIAL_FIELD_NAME)
	Material material;
	@DatabaseField
	int unidades;
	@DatabaseField
	BigDecimal precio;

	/**
	 *  Función que permite asociar un material a un trabajo dado, 
	 *  creando un objeto en la BD
	 * @param trabajo
	 * @param material
	 * @param unidades
	 * @param precio
	 * @return el objeto creado
	 * @throws SQLException
	 */
	public
	static MaterialTrabajo crear(Trabajo trabajo, Material material,
			int unidades, BigDecimal precio)
			throws SQLException
	{
		MaterialTrabajo materialTrabajo = new MaterialTrabajo();

		materialTrabajo.setTrabajo(trabajo);
		materialTrabajo.setMaterial(material);
		materialTrabajo.setUnidades(unidades);
		materialTrabajo.setPrecio(precio);
		getClassDao(MaterialTrabajo.class).create(materialTrabajo);

		return materialTrabajo;
	}

	public
	MaterialTrabajo() {
		// ORM Lite necesita un constructor por defecto
	}

	/**
	 * getters y setters
	 */
	public int         	getId()          		{ return id; }
	public Trabajo		getTrabajo() 			{ return trabajo; }
	public Material		getMaterial() 			{ return material; }
	public int			getUnidades()			{ return unidades; }
	public BigDecimal	getPrecio()				{ return precio; }

	public
	void setTrabajo(Trabajo trabajo) {
		this.trabajo = trabajo;
	}

	public
	void setMaterial(Material material) {
		this.material = material;
	}

	public
	void setUnidades (int unidades) {
		this.unidades = unidades;
	}

	public
	void setPrecio (BigDecimal precio) {
		this.precio = precio;
	}
}

